package com.shujia.wyh.day28;

import java.io.FileReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

/*
        通过配置文件运行类中的方法
        Properties

        一般情况下，配置文件有以下几种格式：基本上都是以键值对的方式存在
            格式1：
                username: xxx
                password: xxx
                xxx: xxx

            格式2：
                <name>className</name>
                <value>com.xxx.xxx.xx</value>

            格式3：
                name=xiaohu
                age=18
                password=123456
 */
public class ReflexTest1 {
    public static void main(String[] args) throws Exception {
        //学习反射之前
//        Person person = new Person();
//        person.fun2();

        //学习反射之后
        Properties prop = new Properties();
        FileReader fr = new FileReader("D:\\IdeaProjects\\bigdata17\\src\\com\\shujia\\wyh\\day28\\configure.txt");
        prop.load(fr);
        fr.close();

        //获取数据
        String className = prop.getProperty("className");
        System.out.println(className);
        String methodName = prop.getProperty("methodName");
        System.out.println(methodName);

        //通过反射实现
        Class<?> c1 = Class.forName(className);
        Constructor<?> con1 = c1.getConstructor();
        Object o = con1.newInstance();

        Method fun2 = c1.getDeclaredMethod(methodName, String.class);
        //暴力访问
        fun2.setAccessible(true);
        fun2.invoke(o,"你好");

    }
}
